#include "main.h"
// 
#include "stm32f1xx_it.h"
#include "flash_divide.h"
// lib
#include "cmsis_os2.h"
#include "FreeRTOS.h"
#include "debug.h"
#include "stm32F1xx_clock.h"
// msp
#include "stm32f1xx_hal.h"
#include "msp_gpio.h"
#include "msp_uart.h"
#include "msp_can.h"
#include "msp_timer.h"
//bsp
// #include "wwdg.h"
// app
#include "app_manager.h"

void Msp_Init(void);

int main(void)
{
    // NVIC_SetVectorTable(BOOTLOADER_ADDR_START, \
    //     (APPLICATION_MAIN_ADDR_START - BOOTLOADER_ADDR_START));     //这句话可以加在IAP APP就不用再单独添加
    // __enable_irq();                                                 //! 恢复全局中断
    // MSP_WWDG_Init();
    Msp_Init();                                                     //系统上电初始化
    App_Init();                                                     //执行应用程序
}

/**
 * @brief 单片机底层初始化
 *
 */
void Msp_Init(void)
{
    SystemClock_Config();                                   // 设置时钟树
    // nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);      // 设置中断优先级全抢占模式
    // crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);  // 使能IO复位时钟
    // gpio_pin_remap_config(SWJTAG_MUX_010, TRUE);            // 仅保留swd sclk,取消其他jtag脚的复用
    // MSP_DMA_Init();
    _DEBUG_INIT();                                          // 初始化debug接口
    _DEBUG_PRINT(DBG_SYS, "msp init start\r\n");            // msp初始化开始
    MSP_GPIO_Init();
    // MSP_ADC2_Init();
    // MSP_CAN_Init();
    // MSP_USB_PCD_Init();
    // MSP_CRC_Init();
    // MSP_I2C1_Init();
    // MSP_I2C2_Init();
    // MSP_SPI1_Init();
    // MSP_SPI2_Init();
    // MSP_TIM1_Init();
    // MSP_TIM2_Init();
    // MSP_TIM3_Init();
    // MSP_USART2_UART_Init();
    _DEBUG_PRINT(DBG_SYS, "msp init done\r\n");             // msp初始化结束
}


